/* eslint-disable no-use-before-define */
import axios, { type Paging, type Response } from '@/utils/axios/axios';

/** 得到基础商品列表 */
export function getBaseProductListAxios(data: BaseProductListRequest): Promise<Response<Paging<BaseProduct>>> {
  const _data: BaseProductListRequest = JSON.parse(JSON.stringify(data));
  if (typeof data?.productType !== 'number' || ![1, 2, 4].includes(data?.productType)) {
    delete _data.productType;
  }
  return axios.get(`/system/baseProduct/page`, { params: _data }) as unknown as Promise<Response<Paging<BaseProduct>>>;
}

/** 得到价格列表 */
export function getProductPriceInfoAxios(): Promise<Response<ProductPriceInfo>> {
  return axios.get(`/system/baseProduct/getProductPriceInfo`) as unknown as Promise<Response<ProductPriceInfo>>;
}

/** 新增基础商品 */
export function addBaseProductAxios(data: AddBaseProductRequest): Promise<Response<string>> {
  return axios.post(`/system/baseProduct/add`, data) as unknown as Promise<Response<string>>;
}

/** 编辑基础商品 */
export function editBaseProductAxios(data: EditBaseProductRequest): Promise<Response<string>> {
  return axios.post(`/system/baseProduct/edit`, data) as unknown as Promise<Response<string>>;
}

/** 得到赠送商品列表 */
export function getGiveProductListAxios(data: GiveProductListRequest): Promise<Response<Paging<GiveProduct>>> {
  const _data: GiveProductListRequest = JSON.parse(JSON.stringify(data));
  if (typeof data?.productType !== 'number' || ![1, 2, 4].includes(data?.productType)) {
    delete _data.productType;
  }
  return axios.get(`/system/productGive/page`, { params: _data }) as unknown as Promise<Response<Paging<GiveProduct>>>;
}
/**
 * 删除赠送商品
 * @param productId - 商品id
 */
export function delBaseProductAxios(productId: number): Promise<Response<string>> {
  return axios.delete(`/system/baseProduct/remove`, { params: { productId } }) as unknown as Promise<Response<string>>;
}

/**
 * 删除赠送商品
 * @param productId - 商品id
 */
export function delGiveProductAxios(productId: number): Promise<Response<string>> {
  return axios.delete(`/system/productGive/remove/${productId}`) as unknown as Promise<Response<string>>;
}

/** 新增赠送商品 */
export function addGiveProductAxios(data: AddBaseProductRequest): Promise<Response<string>> {
  return axios.post(`/system/productGive/add`, data) as unknown as Promise<Response<string>>;
}

/** 编辑赠送商品 */
export function editGiveProductAxios(data: EditGiveProductRequest): Promise<Response<string>> {
  return axios.post(`/system/productGive/edit`, data) as unknown as Promise<Response<string>>;
}

export type AddProductRequest = {
  /** 商品名称 */
  productName: string;
  /** 商品价格（元） */
  productPrice: number | null;
  /** 数量（对应虚拟币数或VIP天数） */
  productQuantity: number | null;
  /** 商品类型：1-充值虚拟币；2-购买会员；4-购买全集； */
  productType: 1 | 2 | 4;
};

export type AddBaseProductRequest = AddProductRequest;
export type AddGiveProductRequest = AddProductRequest;

export type EditBaseProductRequest = AddProductRequest & {
  /** 商品id  */
  productId: number;
};

export type EditGiveProductRequest = AddProductRequest & {
  /** 商品id  */
  productGiveId: number;
};

export type ProductListRequest = {
  /** 当前页  */
  current: number;
  /** 商品名称 */
  productName?: string;
  /** 商品类型：1-充值虚拟币；2-购买会员；4-购买全集； */
  productType?: 1 | 2 | 4 | undefined;
  /** 每页数量 */
  size: number;
};

export type BaseProductListRequest = ProductListRequest & {
  /** 商品id  */
  productId?: number;
};
export type GiveProductListRequest = ProductListRequest & {
  /** 商品id  */
  productGiveId?: number;
};
export type BaseProduct = {
  [x: string]: unknown;
  /** 商品id */
  productId: number;
  /** 商品名称 */
  productName: string;
  /** 商品价格（元）  */
  productPrice: number;
  /** 数量（对应虚拟币数或VIP天数） */
  productQuantity: number;
  /** 商品类型：1-充值虚拟币；2-购买会员；4-购买全集； */
  productType: 1 | 2 | 4;
  /** 商品类型说明：1-充值虚拟币；2-购买会员；4-购买全集； */
};

export type GiveProduct = {
  [x: string]: unknown;
  /** 商品id */
  productGiveId: number;
  /** 商品名称 */
  productName: string;
  /** 商品价格（元）  */
  productPrice: number;
  /** 数量（对应虚拟币数或VIP天数） */
  productQuantity: number;
  /** 商品类型：1-充值虚拟币；2-购买会员；4-购买全集； */
  productType: 1 | 2 | 4;
  /** 商品类型说明：1-充值虚拟币；2-购买会员；4-购买全集； */
  productTypeDesc: 1 | 2 | 4;
};

/**
 * 返回数据实体
 *
 * GetProductPriceInfoDTO
 */
export type ProductPriceInfo = {
  /** 商品ios价格列表 */
  priceList?: { val: number }[];
  /** 人民币-K币比例 */
  priceRate?: number;
};
